package com.java.collection.list;

import java.util.ArrayList;
import java.util.List;

import org.junit.Test;

import com.collection.model.Student;

/**
 * ArrayList（重点）:
 *  	底层数据结构是数组，查询快，增删慢；
 *  	线程不安全，但效率高；
 * @author LC
 *
 */
public class ArrayListTest {
	
	/**
	 * ArrayList去除重复字符串01
	 * 步骤：
	 * 		1、创建集合对象
	 * 		2、添加字符串元素（含重复元素）
	 * 		3、创建新集合
	 * 		4、遍历旧集合中的每一个元素
	 * 		5、与新集合中的元素进行匹配
	 * 			有：不处理
	 * 			没有：添加到新集合
	 * 		6、遍历新集合
	 */
	@Test
	public void testArrayList_01() {
		
		List<String> list = new ArrayList<>() ;
		
		list.add("1111") ;
		list.add("2222") ;
		list.add("3333") ;
		list.add("1111") ;
		list.add("2222") ;
		
		System.out.println("遍历输出list集合中的所有元素");
		for (String element : list) {
			System.out.println(element);
		}
		System.out.println();
		
		List<String> newList = new ArrayList<>() ;
		
		//去重
		for (String element : list) {
			if(!newList.contains(element)) {
				newList.add(element) ;
			}
		}
		
		System.out.println("遍历输出newList集合中的所有元素");
		for (String element : newList) {
			System.out.println(element);
		}
	}
	
	/**
	 * ArrayList去除重复字符串02
	 * 		利用选择排序思想：
	 * 			拿0索引的元素依次和后面进行比较，去掉重复元素
	 * 			同理，拿1索引的元素...
	 */
	@Test
	public void testArrayList_02() {
		
		List<String> list = new ArrayList<>() ;
		
		list.add("1111") ;
		list.add("2222") ;
		list.add("3333") ;
		list.add("1111") ;
		list.add("2222") ;
		
		System.out.println("遍历输出list集合中的所有元素");
		for (String element : list) {
			System.out.println(element);
		}
		System.out.println();
		
		//去重
		for(int i = 0; i < list.size()-1; i++) {
			for(int j = i+1; j < list.size(); j++) {
				if(list.get(i).equals(list.get(j))) {
					list.remove(j) ;
				}
			}
		}
		
		for (String element : list) {
			System.out.println(element);
		}
		
	}
	
	/**
	 * ArrayList去除重复自定义对象
	 * 		需重写自定义对象的equals()方法
	 */
	@Test
	public void testArrayList_03() {
		
		List<Student> list = new ArrayList<>() ;
		
		Student student01 = new Student("张三01",21) ;
		Student student02 = new Student("张三02",22) ;
		Student student03 = new Student("张三02",22) ;
		Student student04 = new Student("张三02",22) ;
		
		list.add(null) ;
		list.add(student01) ;
		list.add(student02) ;
		list.add(student03) ;
		list.add(student04) ;
		list.add(null) ;
		
		System.out.println("遍历输出list集合中的所有元素");
		for (Student student : list) {
			System.out.println(student);
		}
		System.out.println();
		
		List<Student> newList = new ArrayList<>() ;
		
		//去重
		for (Student student : list) {
			if(!newList.contains(student)) {
				newList.add(student) ;
			}
		}
		
		System.out.println("遍历输出newList集合中的所有元素");
		for (Student student : newList) {
			System.out.println(student);
		}
		
	}

}
